iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0

在Mendix上我也是第一次用到XPath,但其實XPath早在1998年就已經存在了,最近的版本在2017年更新過,XPath是一種XML路徑語言(XML Path Language),主要用來確認XML檔案中某節點(node)的存在位置。跟我們平常在用的HTML一樣,XML也是一個樹狀結構,因此XPath可以依循著該結構來找尋需要的部分。

在Mendix裡舉足輕重的XPath 是什麼?

一般來說XPath主要有七種節點:element, attribute, text, namespace, processing instruction, comment, document,且有超過200種內建函數(function)。
時至今日,XPath使用範圍極廣,可用在JavaScript, Java, XML Schema, PHP, Python, C 與 C++等等程式語言,而XPath也是XSLT語言中重要的一環

https://ithelp.ithome.com.tw/upload/images/20200929/20129530qkOYBdXgrt.jpg

以Kanye West的歌曲為例(嘿嘿!想不到我這樣都可以提到肯爺,我們可以寫出以下的XML檔案

<?xml version="1.0" encoding="UTF-8"?>

<album>
  <song>
    <title lang="en">Ni**as In Paris</title>
    <singer>Jay-Z, Kanye West</singer>
    <year>2011</year>
    <genre>Hip Hop</genre>
  </song>
</album>

以這個結構來說
<album> </album>root element node
<genre>Hip Hop</genre> 是一個 element node
lang="en" 是一個attribute node

節點之間的關係,跟我們熟悉的親戚樹狀圖有點像
想像你是<genre>Hip Hop</genre> 這一個節點,<song>即是你的父節點(Parent),你是<song>子節點(Child),而其他<title> <singer>… 是你的同輩節點(Siblings)。
而Hip Hop 與 en 被稱為Atomic Values,因為在他們之下就沒有其他東西了。

選擇節點

使用於選擇節點的符號有

https://ithelp.ithome.com.tw/upload/images/20200929/20129530GDfOkKw5mP.png

album: 選擇全部叫作album的節點
/album: 選擇叫album的root element node
album/song: 選擇album中全部叫作的song 子節點
//song: 選擇全部叫作song的節點,無論他們在哪一個位置上
album//song: 選擇album以下的所有叫做song的節點無論是在哪一層
//@lang: 選擇所有叫做lang的屬性(attribute)

其他更進階的節點選擇方式可以上w3schools上查看。

操作符(operator)兜幾?

小孩才做選擇呢,我全都要用用看! 以下表單收錄會用到的操作符

https://ithelp.ithome.com.tw/upload/images/20200929/20129530TwwYU5ntSz.png

XPath實戰用法

以這個XML為例

<?xml version="1.0" encoding="UTF-8"?>

 <albums>
  <album>
    <title lang="en">Watch the Throne</title>
    <singer>Jay-Z, Kanye West</singer>
    <year>2011</year>
    <genre>Hip Hop</genre>
  </album>

  <album>
    <title lang="en">My Beautiful Dark Twisted Fantasy</title>
    <singer> Kanye West</singer>
    <year>2010</year>
    <genre>Hip Hop</genre>
  </album>
</albums>

找所有專輯的標題
/albums/album/title
找第一個專輯的標題 (注意是從1開始算!)
/albums/album[1]/title
找所有2010年以後的專輯標題
/albums/album[year>2010]/title
找所有專輯的演唱者
/albums/album/singer[text()]

附錄

結論, XPath在Mendix上很常被用到,這次認真研究後才發現,原來還有更多以前不知道的操作方式!!


上一篇
其實低代碼平台(low-code)也是要Debug的
下一篇
會寫程式也要會Team Server的版本控制
系列文
Mendix從入門到了解,工程師和業務都要知道低代碼平台是什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言